iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

30天開啟.NET後端工程師的旅程系列 第 10

Day 10 深入了解C#函數(Functions)的原理和用法

  • 分享至 

  • xImage
  •  

前言

根據Day 9 提到的class類別,裡面有相關的成員,像是Method , Field , Constructor
除了這些類別成員以外還有函數。
寫成函數是為了方便維護,可以隱藏很多實作的細節,也可以容易理解。


當你設計函數時,有一些重要的重點和指南可以幫助你寫出高品質的程式碼:

  1. 確定型別和參數: 首先,明確函數應該傳回什麼型別的值,以及應該傳入哪些參數。盡量保持參數的數量不要過多,最好不要超過 3 個,以確保函數簡單易懂。
  2. **單一職責原則:**當遵循單一職責原則時,每個函數應該只執行一個特定的任務或功能,以確保程式碼的模組化和易於維護。
  3. 命名規則: 使用有意義且描述函數功能的名稱。採用駝峰式命名法(CamelCase),即函數名稱的第一個字母小寫,後面的字首大寫,並以小括號結尾。
  4. 多載: 可以使用相同的函數名稱,但後面的參數必須不同,包括數量、型別和順序。這種情況被稱為函數的多載(overload)。在Day9也有舉例說明。
  5. 控制函數長度: 單一函數的程式碼不宜過長,最好維持在 5 到 10 行之間,最多不要超過一個螢幕的高度(約幾十行)。如果一個函數過於龐大,應該考慮分解成多個小函數或類別。
    參考Clean Code的程式設計風格,可以透過簡潔,簡單扼要的程式邏輯,清楚易懂的程式設計知識與架構,可以直覺的舊理解程式碼的內容,也因為這樣讓程式碼變得容易維護。
  6. 程式碼結構化: 根據內容適度地將程式碼區段分組,並在各組程式碼之間留一個空白行,以提高可讀性。
  7. 可讀性: 確保你的程式碼易於閱讀,命名清晰且具有語義。使用有意義的變數名稱和函數名稱,讓名稱描述的越精準越重要。
  8. 註解: 如果函數有複雜的邏輯或特殊的處理,請添加註解來解釋函數的作用、原因和實現方式。註解應該與程式碼同步更新,方便其他開發人員接手的時候可以快速的了解。
  9. 函數位置: 函數應該寫在適當的類別中,以確保邏輯結構清晰且具有組織性。
  10. 測試先行: 在實作函數之前,建議先撰寫測試用例,以確保函數正確運作。如果測試通過,才開始編寫函數。

這些建議有助於撰寫結構化且易於維護的程式碼,提高程式碼品質和可讀性。

但上面這些看完,跟我們在Day 9提到寫成一個類別好像很像?那這樣說起來函數跟類別又差在哪裡??

函數(Function)和類別(Class)是兩種不同的程式設計概念,它們之間有一些重要的區別:

  1. 封裝性和組織性:
    • 函數: 函數是一段可重複使用的程式碼,通常用於執行特定任務或操作。
      函數通常是獨立的,它們接受輸入,執行操作,然後返回結果。
      函數通常不具備封裝性,即函數本身不包含狀態或數據。它們僅關心輸入和輸出。
    • 類別: 類別是一種較高層次的概念,它可以包含數據(稱為成員變數或屬性)和方法(函數)。
      類別是用於建立物件的模板,它可以定義物件的屬性和行為。
      類別具有封裝性,可以隱藏內部實現細節,同時可以創建多個物件實例,每個實例都具有自己的狀態。
  2. 實例化:
    • 函數: 函數不需要實例化,它們是一段程式碼,可以直接呼叫。
    • 類別: 類別必須實例化為物件,然後才能使用。物件是類別的實例,每個物件都有自己的狀態和行為。
  3. 成員變數和屬性:
    • 函數: 函數通常不包含成員變數或屬性,它們是純粹的操作程式碼。
    • 類別: 類別可以包含成員變數(或屬性),這些變數用於存儲物件的狀態和數據。

根據上面描述小小總結:

函數是用於執行特定操作的程式碼段,而類別是用於定義物件的模型,包括物件的屬性和行為。
函數通常是獨立的,而類別具有封裝性並可以用於創建多個物件實例。
函數和類別在程式設計中具有不同的角色和用途。

"函數" 和 "方法" 是兩個相似但稍有不同

  1. 函數(Function):
    • "函數" 通常指的是一段程式碼,它接受輸入(參數),執行特定的操作,並返回結果。
    • 函數可以在不同的編程語言中使用,並且不一定需要與類別或物件相關聯。
    • 例如,在數學中,我們有函數的概念,如 f(x) = x^2,這個函數接受一個數字 x 作為輸入,執行平方操作,然後返回結果。
  2. 方法(Method):
    • "方法" 是一個特定於物件導向程式設計的,通常指的是一個在類別或物件內部定義的函數。
    • 方法是與類別或物件相關聯的,它可以訪問類別的成員變數和其他方法,並且可以用於操作該類別的狀態。
    • 方法通常用於實現物件的行為或功能。
    • 例如,如果有一個 "Car" 類別,那麼 "StartEngine" 可能是該類別的一個方法,用於啟動汽車的引擎。這個方法將訪問汽車對象的內部狀態,例如引擎的狀態,並執行啟動操作。

第十天挑戰完成!!


上一篇
Day 9 Class 類別
下一篇
Day 11 物件導向 OOP
系列文
30天開啟.NET後端工程師的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言